home *** CD-ROM | disk | FTP | other *** search
/ Clickx 75 / Clickx 75.iso / software / expressionweb / expressionwebv3 / ExpressionWeb_en.exe / Setup / WeConen.cab / xweb.ACTIONS.CHNGPROP.JS.en < prev    next >
Encoding:
Text File  |  2009-06-09  |  37.6 KB  |  1,380 lines

  1. 
  2. // globals
  3.  
  4. var oSelectedElement    = null;
  5. var aoElementMatches    = new Array();
  6.  
  7. //////////////////////////////////////////////////////////
  8.  
  9. function onOk()
  10. {
  11.     var oItems = theForm.lvProperties.ListItems;
  12.  
  13.     if( ( null != oSelectedElement ) &&
  14.         ( 0 < oItems.Count ) )
  15.     {
  16.         window.returnValue = RETURN_OK;
  17.         window.close();
  18.     }
  19.     else
  20.     {
  21.         alert( L_OkFailed_ErrorMessage );
  22.     }
  23. }
  24.  
  25. //////////////////////////////////////////////////////////
  26.  
  27. function onCancel()
  28. {
  29.     window.returnValue = RETURN_CANCEL;
  30.     window.close();
  31. }
  32.  
  33. //////////////////////////////////////////////////////////
  34.  
  35. function onDelete()
  36. {
  37.     if( !theForm.btnDelete.disabled )
  38.     {
  39.         deleteSelectedProperty();
  40.     }
  41.     else
  42.     {
  43.         alert( L_NoSelection_ErrorMessage );
  44.     }            
  45. }
  46.  
  47. //////////////////////////////////////////////////////////
  48.  
  49. function onClickElementGroup()
  50. {
  51.     syncSelectors();
  52.     
  53.     selectedElementChanged();
  54. }
  55.  
  56. //////////////////////////////////////////////////////////
  57.  
  58. function onEdit()
  59. {
  60.     if( !theForm.btnEdit.disabled )
  61.     {
  62.         invokeEditDialog();    
  63.     }
  64.     else
  65.     {
  66.         alert( L_NoSelection_ErrorMessage );
  67.     }    
  68. }
  69.  
  70. //////////////////////////////////////////////////////////
  71.  
  72. function onInsert()
  73. {
  74.     if( !theForm.btnInsert.disabled )
  75.     {
  76.         invokeInsertDialog()
  77.     }
  78.     else
  79.     {
  80.         alert( L_NoSelection_ErrorMessage );
  81.     }        
  82. }
  83.  
  84. //////////////////////////////////////////////////////////
  85.  
  86. function onFont()
  87. {
  88.     invokeFontDialog();
  89. }
  90.  
  91. //////////////////////////////////////////////////////////
  92.  
  93. function onPosition()
  94. {
  95.     invokePositionDialog();
  96. }
  97.  
  98. //////////////////////////////////////////////////////////
  99.  
  100. function onBorders()
  101. {
  102.     invokeBordersShadingDialog();
  103. }
  104.  
  105. //////////////////////////////////////////////////////////
  106.  
  107. function onVisibility()
  108. {
  109.     invokeVisibilityDialog();
  110. }
  111.  
  112. //////////////////////////////////////////////////////////
  113.  
  114. function onResize()
  115. {
  116.     resizeColumnHeaders();
  117. }
  118.  
  119. //////////////////////////////////////////////////////////
  120.  
  121. function onTagIDChange()
  122. {
  123.     selectedElementChanged();
  124. }
  125.  
  126. //////////////////////////////////////////////////////////
  127.  
  128. function onTagTypeChange()
  129. {
  130.     populateIDSelector();
  131.     
  132.     selectedElementChanged();
  133. }
  134.  
  135. //////////////////////////////////////////////////////////
  136.  
  137. function selectedElementChanged()
  138. {        
  139.     var oPrevSelectedElement    = oSelectedElement;    
  140.  
  141.     if( theForm.radCurrentElement.checked )
  142.     {
  143.         oSelectedElement = getBehaviorElement();                
  144.     }
  145.     else
  146.     {
  147.         var nSelectedTag = theForm.ddTagType.selectedIndex;
  148.         
  149.         if( 0 <= nSelectedTag )
  150.         {
  151.             var oSelectedTag = theForm.ddTagType.options[nSelectedTag];    
  152.             var strSelectedTag = oSelectedTag.value;
  153.             
  154.             var nSelectedID = theForm.ddTagID.selectedIndex;
  155.             
  156.             if( 0 <= nSelectedID )
  157.             {
  158.                 var oSelectedID        = theForm.ddTagID.options[nSelectedID];
  159.                 var strSelectedID    = oSelectedID.value;            
  160.  
  161.                 oSelectedElement = getElementByName( FrontPage.ActiveDocument, strSelectedID, strSelectedTag );
  162.             }
  163.         }
  164.     }            
  165.     
  166.     if( oPrevSelectedElement != oSelectedElement )
  167.         clearPropertyLV();        
  168. }
  169.  
  170. //////////////////////////////////////////////////////////
  171.  
  172. function deleteSelectedProperty()
  173. {
  174.     var oSelected = theForm.lvProperties.SelectedItem;
  175.     
  176.     if( oSelected )
  177.     {    
  178.         removePropertyLVI( oSelected.Index );
  179.     }
  180.  
  181.     highlightPropertySelection();
  182. }
  183.  
  184. //////////////////////////////////////////////////////////
  185.  
  186. function deleteProperty( strName )
  187. {    
  188.     var oProperties = theForm.lvProperties.ListItems;
  189.  
  190.     for( var nProperty = 1; nProperty <= oProperties.Count; nProperty++ )
  191.     {
  192.         var oItem            = oProperties.Item( nProperty )
  193.         var strPropertyName = getPropName( oItem );
  194.         
  195.         if( strName == strPropertyName ) 
  196.         {
  197.             removePropertyLVI( oItem.Index );                    
  198.         }
  199.     }    
  200. }
  201.  
  202. //////////////////////////////////////////////////////////
  203.  
  204. function highlightPropertySelection()
  205. {
  206.     oSelected = theForm.lvProperties.SelectedItem;
  207.     
  208.     if( oSelected )
  209.     {
  210.         theForm.lvProperties.SelectedItem = oSelected;
  211.     }
  212. }
  213.  
  214. //////////////////////////////////////////////////////////
  215.  
  216. function syncSelectors()
  217. {
  218.     var bDisableTagSelectors    = false;
  219.     
  220.     if( theForm.radCurrentElement.checked )
  221.     {
  222.         bDisableTagSelectors = true;
  223.     
  224.         populateTagSelectors();        
  225.             
  226.         theForm.ddTagType.disabled    = bDisableTagSelectors;
  227.         theForm.ddTagID.disabled    = bDisableTagSelectors;            
  228.     }
  229.     else
  230.     {
  231.         populateTagSelectors();        
  232.     }
  233. }
  234.  
  235. //////////////////////////////////////////////////////////
  236.  
  237. function syncEditButtons()
  238. {
  239.     // enable, disable Edit and Delete buttons
  240.     
  241.     var oSelected = theForm.lvProperties.SelectedItem;
  242.  
  243.     if( null == oSelected )
  244.     {
  245.         theForm.btnEdit.disabled    = true;
  246.         theForm.btnDelete.disabled    = true;
  247.     }
  248.     else
  249.     {
  250.         theForm.btnEdit.disabled    = false;
  251.         theForm.btnDelete.disabled    = false;
  252.     }
  253. }
  254.  
  255. //////////////////////////////////////////////////////////
  256.  
  257. function resizeColumnHeaders()
  258. {
  259.     var nColumn1Width = theForm.lvProperties.clientWidth / 2;
  260.     var nColumn2Width = theForm.lvProperties.clientWidth - nColumn1Width - 5;
  261.     
  262.     nColumn2Width = 0 < nColumn2Width ? nColumn2Width : 0;
  263.     
  264.     theForm.lvProperties.ColumnHeaders.Item( 2 ).Width    = nColumn1Width;
  265.     theForm.lvProperties.ColumnHeaders.Item( 3 ).Width    = nColumn2Width;
  266. }
  267.  
  268. //////////////////////////////////////////////////////////
  269.  
  270. function initializeForm()
  271. {            
  272.     window.onresize = onResize;        
  273.         
  274.     theForm.lvProperties.ColumnHeaders.Clear();    
  275.  
  276.     var oHeader0 = theForm.lvProperties.ColumnHeaders.Add(
  277.                         theForm.lvProperties.ColumnHeaders.Count + 1,
  278.                         "", 
  279.                         "", 
  280.                         0 );                                    
  281.  
  282.     var oHeader1 = theForm.lvProperties.ColumnHeaders.Add(
  283.                         theForm.lvProperties.ColumnHeaders.Count + 1,
  284.                         L_strPropertiesCol1_TopicTitle, 
  285.                         L_strPropertiesCol1_TopicTitle, 
  286.                         0 );                                    
  287.         
  288.     var oHeader2 = theForm.lvProperties.ColumnHeaders.Add(
  289.                         theForm.lvProperties.ColumnHeaders.Count + 1,
  290.                         L_strPropertiesCol2_TopicTitle, 
  291.                         L_strPropertiesCol2_TopicTitle, 
  292.                         0 );
  293.                         
  294.     var strFontSize = String( document.body.currentStyle.fontSize );
  295.     var nPtIndex    = strFontSize.search( "pt$" );
  296.     
  297.     if( document.dir == "rtl" )
  298.     {
  299.         oHeader1.Alignment = 1;    // lvwColumnRight
  300.         oHeader2.Alignment = 1;    // lvwColumnRight
  301.     }    
  302.     
  303.     if( -1 != nPtIndex )
  304.     {            
  305.         theForm.lvProperties.Font.Size = Number( strFontSize.substr( 0, nPtIndex ) );
  306.     }
  307.     
  308.     theForm.lvProperties.Font.Name = g_fontName;
  309.     theForm.lvProperties.Font.Charset = g_fontCharSet;
  310.  
  311.     // define expando properties in case we're in IE5
  312.     theForm.ddTagType.disabled    = false;
  313.     theForm.ddTagID.disabled    = false;
  314.                 
  315.     resizeColumnHeaders();    
  316.     syncSelectors();
  317.     
  318.     highlightPropertySelection();
  319.     
  320.     selectedElementChanged();
  321.     
  322.     var oSel = getBehaviorElement();
  323.     
  324.     // check if we find an existing restore
  325.     var strMouseOut = oSel.getAttribute( 'onmouseout' );
  326.     
  327.     if( strMouseOut )
  328.     {
  329.         if( -1 != strMouseOut.indexOf( "FP_changePropRestore()" ) )
  330.             theForm.chkRestore.checked = true;
  331.     }
  332.     
  333.     safeFocus( theForm.radCurrentElement );    
  334. }
  335.  
  336. function enableFormControls( bEnable )
  337. {    
  338.     theForm.ddTagType.disabled        = !bEnable;
  339.     theForm.ddTagID.disabled        = !bEnable;
  340.     theForm.lvProperties.disabled    = !bEnable;
  341.     theForm.btnEdit.disabled        = !bEnable;
  342.     theForm.btnInsert.disabled        = !bEnable;
  343.     theForm.btnDelete.disabled        = !bEnable;
  344.     theForm.btnBorders.disabled        = !bEnable;    
  345.     theForm.btnPosition.disabled    = !bEnable;    
  346.     theForm.btnFont.disabled        = !bEnable;    
  347.     theForm.btnVisibility.disabled    = !bEnable;    
  348. }
  349.  
  350. //////////////////////////////////////////////////////////
  351.  
  352. function getElementName( oElement )
  353. {    
  354.     var strID = oElement.id ? String( oElement.id ) : "";
  355.     
  356.     if( 0 < strID.length )
  357.     {
  358.         return strID;
  359.     }
  360.         
  361.     // these elements support "name" attributes
  362.     if( stricmp( "a", oElement.tagName ) ||
  363.         stricmp( "applet", oElement.tagName ) ||
  364.         stricmp( "button", oElement.tagName ) ||
  365.         stricmp( "embed", oElement.tagName ) ||
  366.         stricmp( "form", oElement.tagName ) ||
  367.         stricmp( "frame", oElement.tagName ) ||
  368.         stricmp( "img", oElement.tagName ) ||
  369.         stricmp( "iframe", oElement.tagName ) ||
  370.         stricmp( "input", oElement.tagName ) ||
  371.         stricmp( "link", oElement.tagName ) ||
  372.         stricmp( "map", oElement.tagName ) ||
  373.         stricmp( "object", oElement.tagName ) ||
  374.         stricmp( "rt", oElement.tagName ) ||
  375.         stricmp( "ruby", oElement.tagName ) ||        
  376.         stricmp( "select", oElement.tagName ) ||
  377.         stricmp( "textarea", oElement.tagName ) )
  378.     {
  379.         var strName = oElement.name ? String( oElement.name ) : "";
  380.  
  381.         if( 0 < strName.length ) 
  382.         {
  383.             return strName;
  384.         }
  385.     } 
  386.     
  387.     return "";
  388. }
  389.  
  390. //////////////////////////////////////////////////////////
  391.  
  392. function setSelectedElement( strName )
  393. {
  394.     theForm.radSelectElement.checked = true;
  395.  
  396.     syncSelectors();
  397.     
  398.     var oElement    = getElementByName( FrontPage.ActiveDocument, strName );
  399.     
  400.     if( oElement )
  401.     {
  402.         var strTagName    = String( oElement.tagName );    
  403.         var oOptions    = theForm.ddTagType.options;
  404.                 
  405.         for( nOption = 0; nOption < oOptions.length; nOption++ )
  406.         {
  407.             var oOption            = oOptions[nOption];        
  408.  
  409.             if( stricmp( oOption.value, strTagName ) )
  410.             {
  411.                 oOption.selected = true;
  412.                 
  413.                 populateIDSelector();
  414.                 
  415.                 var oOptions = theForm.ddTagID.options;
  416.                 
  417.                 for( nOption = 0; nOption < oOptions.length; nOption++ )
  418.                 {
  419.                     var oOption = oOptions[nOption];
  420.                     
  421.                     if( oOption.value == strName )
  422.                     {
  423.                         oOption.selected = true;
  424.                         
  425.                         oSelectedElement = oElement;
  426.                         
  427.                         return true;
  428.                     }
  429.                 }
  430.                         
  431.                 break;            
  432.             }
  433.         }    
  434.         
  435.         if( L_strNoElements_Text == theForm.ddTagType.value )
  436.         {
  437.             oOptions.length = 0;
  438.         }
  439.         
  440.         // tag type not in filter drop down, add it
  441.         var oOption = document.createElement( "OPTION" );
  442.         
  443.         oOption.text    = strTagName;
  444.         oOption.value    = strTagName;        
  445.         
  446.         oOptions.add( oOption );    
  447.         
  448.         oOption.selected = true;        
  449.         
  450.         var oIDOptions = theForm.ddTagID.options;
  451.         
  452.         oIDOptions.length = 0;
  453.         
  454.         oOption = document.createElement( "OPTION" );
  455.         
  456.         oOption.text    = strName;
  457.         oOption.value    = strName;
  458.         
  459.         oIDOptions.add( oOption );    
  460.         
  461.         oOption.selected = true;
  462.         
  463.         enableFormControls( true );
  464.  
  465.         return true;        
  466.     }
  467.     
  468.     return false;
  469. }
  470.  
  471. //////////////////////////////////////////////////////////
  472.  
  473. function getTagFilters()
  474. {
  475.     astrTags = new Array();
  476.  
  477.     astrTags[astrTags.length] = "BODY";
  478.     astrTags[astrTags.length] = "BUTTON";
  479.     astrTags[astrTags.length] = "DIV";
  480.     astrTags[astrTags.length] = "FORM";
  481.     astrTags[astrTags.length] = "IMG";
  482.     astrTags[astrTags.length] = "INPUT";    
  483.     astrTags[astrTags.length] = "OBJECT";
  484.     astrTags[astrTags.length] = "P";
  485.     astrTags[astrTags.length] = "SELECT";
  486.     astrTags[astrTags.length] = "SPAN";
  487.     astrTags[astrTags.length] = "TABLE";
  488.     astrTags[astrTags.length] = "TD";
  489.     astrTags[astrTags.length] = "TR";
  490.     
  491.     return astrTags;
  492. }
  493.  
  494. //////////////////////////////////////////////////////////
  495.  
  496. function populateTagSelectors()
  497. {
  498.     populateTagTypeSelector();
  499.     populateIDSelector();
  500. }
  501.  
  502. //////////////////////////////////////////////////////////
  503.  
  504. function populateTagTypeSelector()
  505. {    
  506.     var oOptions = theForm.ddTagType.options;
  507.     
  508.     oOptions.length = 0;
  509.  
  510.     var aoMatches        = new Array();
  511.     var aFoundTagNames    = new Array();
  512.     var bUseCurrentElement    = theForm.radCurrentElement.checked;
  513.  
  514.     if( bUseCurrentElement )
  515.     {
  516.         aoMatches[0] = getBehaviorElement();
  517.     }
  518.     else
  519.     {    
  520.         aoMatches  = FrontPage.ActiveDocument.all;
  521.     }
  522.  
  523.     for( var nMatch = 0; nMatch < aoMatches.length; nMatch++ )
  524.     {
  525.         var strName = getElementName( aoMatches[nMatch] );                
  526.  
  527.         if( bUseCurrentElement || ( 0 < strName.length ) )
  528.         {
  529.             var strTagName = aoMatches[nMatch].tagName;
  530.             
  531.             if( aFoundTagNames[strTagName] != true )
  532.             {
  533.                 aFoundTagNames[strTagName] = true;
  534.             
  535.                 var oOption = document.createElement( "OPTION" );
  536.                     
  537.                 oOption.text    = strTagName;
  538.                 oOption.value    = strTagName;
  539.                     
  540.                 oOptions.add( oOption );        
  541.             }                    
  542.         }
  543.     }
  544.             
  545.     // no named elements available
  546.     if( 0 >= oOptions.length )
  547.     {
  548.         var oOption = document.createElement( "OPTION" );
  549.         
  550.         oOption.text    = L_strNoElements_Text;
  551.         oOption.value    = L_strNoElements_Text;
  552.         
  553.         oOptions.add( oOption );            
  554.     }
  555. }
  556.  
  557. //////////////////////////////////////////////////////////
  558.  
  559. function populateIDSelector()
  560. {    
  561.     var oOptions = theForm.ddTagID.options;
  562.  
  563.     oOptions.length = 0;
  564.     
  565.     var    strTagFilter = String( theForm.ddTagType.value );        
  566.     var aoElementMatches;
  567.     
  568.     if( theForm.radCurrentElement.checked )
  569.     {
  570.         aoElementMatches = new Array( getBehaviorElement() );            
  571.     }
  572.     else if( strTagFilter == L_strNoElements_Text )
  573.     {
  574.         var oOption = document.createElement( "OPTION" );
  575.                 
  576.         oOption.text    = "";
  577.         oOption.value    = "";
  578.         
  579.         oOptions.add( oOption );            
  580.         
  581.         aoElementMatches = new Array( 0 );    
  582.     }
  583.     else
  584.     {
  585.         aoElementMatches = getElementsByTagName( FrontPage.ActiveDocument, strTagFilter );    
  586.     }
  587.     
  588.     // populate ID selector drop down
  589.     
  590.     for( var nElement = 0; nElement < aoElementMatches.length; nElement++ )
  591.     {        
  592.         var    strID     = getElementName( aoElementMatches[nElement] );
  593.         var strTag    = String( aoElementMatches[nElement].tagName );                
  594.  
  595.         if( 0 >= strID.length )
  596.         {
  597.             if( theForm.radCurrentElement.checked )
  598.             {
  599.                 strID = L_strNoID_Text;
  600.             }
  601.             else            
  602.             {
  603.                 // skip unID'd objects
  604.                 continue;
  605.             }
  606.         }
  607.                 
  608.         var oOption = document.createElement( "OPTION" );
  609.         
  610.         oOption.text    = strID;
  611.         oOption.value    = strID;
  612.         
  613.         oOptions.add( oOption );            
  614.     }                
  615.         
  616.     if( strTagFilter != L_strNoElements_Text )
  617.     {
  618.         enableFormControls( true );
  619.         
  620.         theForm.ddTagID.selectedIndex = 0;        
  621.     }
  622.     else
  623.     {        
  624.         enableFormControls( false );
  625.     }    
  626. }
  627.  
  628. //////////////////////////////////////////////////////////
  629.  
  630. function invokeInsertDialog()
  631. {            
  632.     var aDialogArguments = new Array();
  633.     
  634.     aDialogArguments[0] = "insert";
  635.  
  636.     var astrReturn = FrontPage.ShowHTMLDialog( "InsertPr.htm", aDialogArguments );
  637.     
  638.     if( astrReturn )
  639.     {
  640.         var strName        = String( astrReturn[0] );
  641.         var strValue    = String( astrReturn[1] );
  642.         
  643.         if( 0 < strName.length )
  644.         {            
  645.             insertProperty( strName, strValue );
  646.         }
  647.     }
  648. }
  649.  
  650. //////////////////////////////////////////////////////////
  651.  
  652. function invokeEditDialog()
  653. {
  654.     var oSelected = theForm.lvProperties.SelectedItem;
  655.  
  656.     if( oSelected )
  657.     {
  658.         var aDialogArguments = new Array();
  659.         
  660.         aDialogArguments[0] = "edit";        
  661.         aDialogArguments[1] = getPropName( oSelected );
  662.         aDialogArguments[2] = getPropValue( oSelected );
  663.  
  664.         var astrReturn = FrontPage.ShowHTMLDialog( "InsertPr.htm", aDialogArguments );
  665.  
  666.         if( astrReturn )
  667.         {
  668.             var strName        = String( astrReturn[0] );    
  669.             var strValue    = String( astrReturn[1] );
  670.                 
  671.             if( 0 < strName.length )
  672.             {            
  673.                 deleteSelectedProperty();
  674.                 var oProperty = insertProperty( strName, strValue );
  675.                 
  676.                 oProperty.selected = true;
  677.             }
  678.         }        
  679.     }
  680. }
  681.  
  682. //////////////////////////////////////////////////////////
  683.  
  684. function invokeVisibilityDialog()
  685. {
  686.     var oProperties     = theForm.lvProperties.ListItems;
  687.     var strVisibility     = "";
  688.     var nProperty        = -1;
  689.     
  690.     for( var nProperty = 1; nProperty <= oProperties.Count; nProperty++ )
  691.     {
  692.         var oProperty            = oProperties.Item( nProperty )
  693.         var strPropertyName     = getPropName( oProperty );
  694.         
  695.         if( "style.visibility" == strPropertyName.toLowerCase() )
  696.         {
  697.             strVisibility = getPropValue( oProperty );
  698.             
  699.             nProperty = oProperty.Index;
  700.             
  701.             break;
  702.         }
  703.     }
  704.     
  705.     var aDialogArguments = new Array();
  706.     
  707.     aDialogArguments[0] = "visibility";
  708.     aDialogArguments[1] = strVisibility;
  709.  
  710.     var astrReturn = FrontPage.ShowHTMLDialog( "InsertPr.htm", aDialogArguments );
  711.  
  712.     if( astrReturn )
  713.     {
  714.         var strValue     = String( astrReturn[0] );            
  715.         var oProperty     = insertProperty( "style.visibility", strValue );
  716.             
  717.         oProperty.selected = true;
  718.     }
  719. }
  720.  
  721. //////////////////////////////////////////////////////////
  722.  
  723. function insertProperty( strName, strValue )
  724. {    
  725.     strName = trimStringLeft( trimStringRight( strName ) );
  726.     strValue = trimStringLeft( trimStringRight( strValue ) );
  727.     
  728.     var oProperty    = null;
  729.     var oProperties = theForm.lvProperties.ListItems;
  730.  
  731.     for( var nProperty = 1; nProperty <= oProperties.Count; nProperty++ )
  732.     {
  733.         var oItem            = oProperties.Item( nProperty )
  734.         var strPropertyName = getPropName( oItem );
  735.         
  736.         if( strName == strPropertyName ) 
  737.         {
  738.             oProperty = oItem;
  739.             
  740.             break;
  741.         }
  742.     }
  743.     
  744.     if( null == oProperty )
  745.     {        
  746.         var nIndex    = oProperties.Count + 1;
  747.         var strKey    = "KEY_" + strName;
  748.     
  749.         oProperty = addPropertyLVI( nIndex, strKey, "" );
  750.     }
  751.     
  752.     setPropName( oProperty, strName );
  753.     setPropValue( oProperty, strValue );
  754.     
  755.     return oProperty;
  756. }
  757.  
  758. //////////////////////////////////////////////////////////
  759.  
  760. function clearPropertyLV()
  761. {
  762.     theForm.lvProperties.ListItems.Clear();
  763.     
  764.     syncEditButtons();
  765. }
  766.  
  767. //////////////////////////////////////////////////////////
  768.  
  769. function removePropertyLVI( nIndex )
  770. {
  771.     theForm.lvProperties.ListItems.Remove( nIndex );
  772.     
  773.     syncEditButtons();
  774. }
  775.  
  776. //////////////////////////////////////////////////////////
  777.  
  778. function addPropertyLVI( nIndex, strKey, strName )
  779. {
  780.     var oProperty = theForm.lvProperties.ListItems.Add( nIndex, strKey,    strName );    
  781.     
  782.     oProperty.Tag = new Object();
  783.     
  784.     oProperty.Tag.strName = "";
  785.     oProperty.Tag.strValue = "";    
  786.     
  787.     syncEditButtons();
  788.     
  789.     return oProperty;
  790. }
  791.  
  792. //////////////////////////////////////////////////////////
  793.  
  794. function getPropName( oItem )
  795. {
  796.     return oItem.Tag.strName;
  797. }
  798.  
  799. //////////////////////////////////////////////////////////
  800.  
  801. function getPropValue( oItem )
  802. {
  803.     return oItem.Tag.strValue;
  804. }
  805.  
  806. //////////////////////////////////////////////////////////
  807.  
  808. function setPropName( oItem, strName )
  809. {
  810.     oItem.SubItems( 1 ) = strName;
  811.     oItem.Tag.strName = strName;
  812. }
  813.  
  814. //////////////////////////////////////////////////////////
  815.  
  816. function setPropValue( oItem, strValue )
  817. {
  818.     oItem.SubItems( 2 ) = strValue;
  819.     oItem.Tag.strValue = strValue;
  820. }
  821.  
  822. //////////////////////////////////////////////////////////
  823.  
  824. function convertCSSDOMtoName( strCSSDOM )
  825. {
  826.     var strCSSName = String( "" );
  827.     var bPrevLowercase = false;    
  828.  
  829.     for( var nPos = 0; nPos < strCSSDOM.length; nPos++ )
  830.     {
  831.         if( isUpperCase( strCSSDOM.charAt( nPos ) ) )
  832.         {
  833.             if( bPrevLowerCase )
  834.             {
  835.                 strCSSName += "-";                            
  836.             }
  837.  
  838.             strCSSName += strCSSDOM.charAt( nPos );
  839.             
  840.             bPrevLowerCase = false;            
  841.         }
  842.         else
  843.         {
  844.             strCSSName += strCSSDOM.charAt( nPos );
  845.         
  846.             bPrevLowerCase = true;
  847.         }
  848.     }
  849.     
  850.     return strCSSName;
  851. }
  852.  
  853. function convertCSSNametoDOM( strCSSName )
  854. {
  855.     var strCSSDOM = String( "" );
  856.     var bNextIsUppercase = false;    
  857.  
  858.     for( var nPos = 0; nPos < strCSSName.length; nPos++ )
  859.     {
  860.         var strChar = String( strCSSName.charAt( nPos ) );
  861.     
  862.         if( "-" == strChar )
  863.         {
  864.             bNextIsUppercase = true;
  865.             
  866.             continue;
  867.         }        
  868.     
  869.         if( bNextIsUppercase )
  870.         {
  871.             strCSSDOM += strChar.toUpperCase();
  872.             
  873.             bNextIsUppercase = false
  874.         }
  875.         else
  876.         {
  877.             strCSSDOM += strChar.toLowerCase();
  878.         }        
  879.     }
  880.     
  881.     return strCSSDOM;
  882. }
  883.  
  884.  
  885. //////////////////////////////////////////////////////////
  886.  
  887. function gatherCSSProperties()
  888. {
  889.     var strCSS        = String( "" );    
  890.     var oProperties = theForm.lvProperties.ListItems;
  891.  
  892.     for( var nProperty = 1; nProperty <= oProperties.Count; nProperty++ )
  893.     {
  894.         var oItem                = oProperties.Item( nProperty )
  895.         var strPropertyName        = getPropName( oItem );
  896.         var strPropertyValue    = getPropValue( oItem );
  897.  
  898.         var nMatchPos = strPropertyName.search( "^style." );
  899.         
  900.         if( -1 != nMatchPos )
  901.         {    
  902.             var strCSSName = convertCSSDOMtoName( strPropertyName.substr( nMatchPos + 6 ) ) + ":" + strPropertyValue + ";"
  903.             
  904.             strCSS += strCSSName;                        
  905.         }
  906.     }
  907.     
  908.     return strCSS;
  909. }
  910.  
  911. //////////////////////////////////////////////////////////
  912.  
  913. function splitCSSProperties( strCSS )
  914. {
  915.     function retValue( strName, strValue )
  916.     {
  917.         this.strName    = String( strName );
  918.         this.strValue    = String( strValue );
  919.     }
  920.     
  921.     var aoReturnValue    = new Array();
  922.     var oCSSNames            = new VBArray( FrontPage.SplitArgs( strCSS, ";" ) );
  923.     var    astrCSSNames        = oCSSNames.toArray();    
  924.     
  925.     for( var nStyle = 0; nStyle < astrCSSNames.length; nStyle++ )
  926.     {
  927.         var strStyle        = trimStringLeft( trimStringRight( astrCSSNames[nStyle] ) );
  928.         
  929.         if( 0 < strStyle.length )
  930.         {
  931.             var oStylePair            = new VBArray( FrontPage.SplitArgs( strStyle, ":" ) );
  932.             var    astrStylePair        = oStylePair.toArray();    
  933.  
  934.             var strStyleName    = trimStringLeft( trimStringRight( astrStylePair[0] ) );
  935.             var strStyleValue    = trimStringLeft( trimStringRight( astrStylePair[1] ) );
  936.             var strStyleDOMName    = "style." + convertCSSNametoDOM( strStyleName );
  937.             
  938.             aoReturnValue[aoReturnValue.length] = new retValue( strStyleDOMName, strStyleValue );
  939.         }
  940.     }        
  941.     
  942.     return aoReturnValue;
  943. }
  944.  
  945. //////////////////////////////////////////////////////////
  946.  
  947. function insertCSSProperties( strCSS )
  948. {
  949.     var aoStyles = splitCSSProperties( strCSS );
  950.     
  951.     for( var nStyle = 0; nStyle < aoStyles.length; nStyle++ )
  952.     {
  953.         var oStyle = aoStyles[nStyle];
  954.     
  955.         insertProperty( oStyle.strName, oStyle.strValue );
  956.     }
  957. }
  958.  
  959. //////////////////////////////////////////////////////////
  960.  
  961. function deleteCSSProperties( strCSS )
  962. {
  963.     var aoStyles = splitCSSProperties( strCSS );
  964.     
  965.     for( var nStyle = 0; nStyle < aoStyles.length; nStyle++ )
  966.     {
  967.         var oStyle = aoStyles[nStyle];
  968.     
  969.         deleteProperty( oStyle.strName );
  970.     }
  971. }
  972.  
  973. //////////////////////////////////////////////////////////
  974.  
  975. function invokeFontDialog()
  976. {    
  977.     var strCSSIn = gatherCSSProperties();    
  978.  
  979.     var strCSSOut = FrontPage.ShowFontDialog( strCSSIn );
  980.  
  981.     deleteCSSProperties( strCSSIn );
  982.     
  983.     insertCSSProperties( strCSSOut );
  984. }
  985.  
  986. //////////////////////////////////////////////////////////
  987.  
  988. function invokePositionDialog()
  989. {
  990.     var strCSSIn = gatherCSSProperties();        
  991.  
  992.     var strCSSOut = FrontPage.ShowPositionDialog( strCSSIn );
  993.  
  994.     deleteCSSProperties( strCSSIn );
  995.     
  996.     insertCSSProperties( strCSSOut );
  997. }
  998.  
  999. //////////////////////////////////////////////////////////
  1000.  
  1001. function invokeBordersShadingDialog()
  1002. {
  1003.     var strCSSIn = gatherCSSProperties();    
  1004.  
  1005.     var strCSSOut = FrontPage.ShowBordersShadingDialog( strCSSIn );
  1006.  
  1007.     deleteCSSProperties( strCSSIn );
  1008.     
  1009.     insertCSSProperties( strCSSOut );
  1010. }
  1011.  
  1012. /////////////////////////////////////////////////////////////////
  1013. //
  1014. // DHTML Scripting methods
  1015. //
  1016. /////////////////////////////////////////////////////////////////
  1017.  
  1018. ///////////////////////////////////////////////////////////
  1019. //
  1020. // $changeProp()
  1021. //
  1022. //  Arguments:
  1023. //        ID/name of element to change
  1024. //        1|0 change property restore?
  1025. //        ( name, value ) pairs of properties to change
  1026.  
  1027. function FP_changeProp() {//v1.0
  1028.  var args=arguments,d=document,i,j,id=args[0],o=FP_getObjectByID(id),s,ao,v,x;
  1029.  d.$cpe=new Array(); if(o) for(i=2; i<args.length; i+=2) { v=args[i+1]; s="o"; 
  1030.  ao=args[i].split("."); for(j=0; j<ao.length; j++) { s+="."+ao[j]; if(null==eval(s)) { 
  1031.   s=null; break; } } x=new Object; x.o=o; x.n=new Array(); x.v=new Array();
  1032.  x.n[x.n.length]=s; eval("x.v[x.v.length]="+s); d.$cpe[d.$cpe.length]=x;
  1033.  if(s) eval(s+"=v"); }
  1034. }
  1035.  
  1036. /////////////////////////////////////////////////////////////////
  1037. //
  1038. // DHTML Scripting Extensions API methods
  1039. //
  1040. /////////////////////////////////////////////////////////////////
  1041.  
  1042. function getScript()
  1043. {
  1044.     return "FP_changeProp,FP_getObjectByID";
  1045. }
  1046.  
  1047. //////////////////////////////////////////////////////////
  1048.  
  1049. function getScriptCall()
  1050. {    
  1051.     var strArgs            = String( "" );
  1052.     var oProperties        = document.theForm.lvProperties.ListItems;    
  1053.     var oDoc            = FrontPage.ActiveDocument;
  1054.  
  1055.     for( var nProperty = 1; nProperty <= oProperties.Count; nProperty++ )
  1056.     {
  1057.         var oItem            = oProperties.Item( nProperty )
  1058.         var strPropertyName    = getPropName( oItem );
  1059.         var strPropertyValue= getPropValue( oItem );
  1060.         var strAdjective    = "";
  1061.         
  1062.         if( 0 < strArgs.length ) 
  1063.         {
  1064.             strArgs += ",";
  1065.         }
  1066.         
  1067.         strPropertyName = escapeString( strPropertyName );
  1068.         strPropertyValue = escapeString( strPropertyValue );
  1069.         
  1070.         // add appropriate adjective
  1071.         if( "src" == strPropertyName )
  1072.         {
  1073.             strAdjective = FP_ADJECTIVE_HREF;
  1074.             
  1075.             strPropertyValue = FrontPage.EncodeUrl( strPropertyValue );
  1076.         }
  1077.         else if( "id" == strPropertyName )
  1078.         {
  1079.             strAdjective = FP_ADJECTIVE_ID;
  1080.         }
  1081.         
  1082.         strArgs += "'" + strPropertyName + "'," + strAdjective + "'" + strPropertyValue + "'";
  1083.     }            
  1084.     
  1085.     var strID = getElementName( oSelectedElement );
  1086.     
  1087.     if( 0 >= strID.length )
  1088.     {
  1089.         strID = oSelectedElement.id = generateUniqueID( FrontPage.ActiveDocument, getDefaultIDPrefix( oSelectedElement.tagName ) );
  1090.     }    
  1091.     
  1092.     var bRestore = theForm.chkRestore.checked;
  1093.     var strRestore = bRestore ? "1" : "0";
  1094.     
  1095.     if( bRestore )
  1096.     {
  1097.         var oElmt        = getBehaviorElement();
  1098.         var strMouseOut = oElmt.getAttribute( "onmouseout" );        
  1099.         
  1100.         if( !strMouseOut ||
  1101.             -1 == strMouseOut.search( "FP_changePropRestore()" ) )
  1102.         {        
  1103.             oDoc.addScript( oElmt, "onmouseout", "FP_changePropRestore()" );
  1104.         }
  1105.     }
  1106.     else
  1107.     {        
  1108.         var oElmt = getBehaviorElement();
  1109.         var n;
  1110.         var strStatement;
  1111.         
  1112.         for( 
  1113.             strStatement = oDoc.getScript( oElmt, "onmouseout", n = 1 );
  1114.             strStatement != "";
  1115.             strStatement = oDoc.getScript( oElmt, "onmouseout", ++n ) )
  1116.         {
  1117.             if( -1 != strStatement.search( "FP_changePropRestore()" ) )
  1118.             {
  1119.                 oDoc.removeScript( oElmt, "onmouseout", n );
  1120.                 
  1121.                 n--;
  1122.             }
  1123.         }
  1124.     }
  1125.  
  1126.     return "FP_changeProp(" + FP_ADJECTIVE_ID + "'" + strID + "'," + strRestore + "," + strArgs + ")";
  1127. }
  1128.  
  1129. //////////////////////////////////////////////////////////
  1130.  
  1131. function isScriptEnabled()
  1132. {        
  1133.     return true;
  1134. }
  1135.  
  1136. //////////////////////////////////////////////////////////
  1137.  
  1138. function initPropertyDialog( strScriptCall )
  1139. {
  1140.     var aArguments    = extractArgumentsFromScriptCall( strScriptCall );
  1141.     var nArguments    = aArguments.length;
  1142.     
  1143.     if( 2 <= nArguments )    
  1144.         if( aArguments[1].strArgument == '1' )
  1145.             theForm.chkRestore.checked = true;            
  1146.     
  1147.     var strSelectedName = unescapeString( trimQuotes( aArguments[0].strArgument ) );                
  1148.     
  1149.     if( setSelectedElement( strSelectedName ) )
  1150.     {
  1151.         for( var nProperty = 2; nProperty < aArguments.length; nProperty += 2 )
  1152.         {
  1153.             var strPropertyName        = unescapeString( trimQuotes( aArguments[nProperty].strArgument ) );
  1154.             var strPropertyValue    = unescapeString( trimQuotes( aArguments[nProperty+1].strArgument ) );
  1155.             
  1156.             if( aArguments[nProperty+1].bIsURL )
  1157.                 strPropertyValue = FrontPage.DecodeUrl( strPropertyValue );
  1158.             
  1159.             insertProperty( strPropertyName, strPropertyValue );            
  1160.         }                    
  1161.     }
  1162.     else
  1163.     {
  1164.         theForm.radCurrentElement.checked = true;
  1165.     
  1166.         alert( L_strSelectedNotFound_ErrorMessage );
  1167.     }        
  1168.  
  1169. // SIG // Begin signature block
  1170. // SIG // MIIatAYJKoZIhvcNAQcCoIIapTCCGqECAQExCzAJBgUr
  1171. // SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
  1172. // SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB
  1173. // SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFCVHMVkuejJL
  1174. // SIG // rdgVoTsdnnx8EzkkoIIVkzCCA8QwggMtoAMCAQICEEe/
  1175. // SIG // GZXfjVJGQ/fbbUgNMaQwDQYJKoZIhvcNAQEFBQAwgYsx
  1176. // SIG // CzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENh
  1177. // SIG // cGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQK
  1178. // SIG // EwZUaGF3dGUxHTAbBgNVBAsTFFRoYXd0ZSBDZXJ0aWZp
  1179. // SIG // Y2F0aW9uMR8wHQYDVQQDExZUaGF3dGUgVGltZXN0YW1w
  1180. // SIG // aW5nIENBMB4XDTAzMTIwNDAwMDAwMFoXDTEzMTIwMzIz
  1181. // SIG // NTk1OVowUzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZl
  1182. // SIG // cmlTaWduLCBJbmMuMSswKQYDVQQDEyJWZXJpU2lnbiBU
  1183. // SIG // aW1lIFN0YW1waW5nIFNlcnZpY2VzIENBMIIBIjANBgkq
  1184. // SIG // hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqcqypMzNIK8K
  1185. // SIG // fYmsh3XwtE7x38EPv2dhvaNkHNq7+cozq4QwiVh+jNtr
  1186. // SIG // 3TaeD7/R7Hjyd6Z+bzy/k68Numj0bJTKvVItq0g99bbV
  1187. // SIG // XV8bAp/6L2sepPejmqYayALhf0xS4w5g7EAcfrkN3j/H
  1188. // SIG // tN+HvV96ajEuA5mBE6hHIM4xcw1XLc14NDOVEpkSud5o
  1189. // SIG // L6rm48KKjCrDiyGHZr2DWFdvdb88qiaHXcoQFTyfhOpU
  1190. // SIG // wQpuxP7FSt25BxGXInzbPifRHnjsnzHJ8eYiGdvEs0dD
  1191. // SIG // mhpfoB6Q5F717nzxfatiAY/1TQve0CJWqJXNroh2ru66
  1192. // SIG // DfPkTdmg+2igrhQ7s4fBuwIDAQABo4HbMIHYMDQGCCsG
  1193. // SIG // AQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29j
  1194. // SIG // c3AudmVyaXNpZ24uY29tMBIGA1UdEwEB/wQIMAYBAf8C
  1195. // SIG // AQAwQQYDVR0fBDowODA2oDSgMoYwaHR0cDovL2NybC52
  1196. // SIG // ZXJpc2lnbi5jb20vVGhhd3RlVGltZXN0YW1waW5nQ0Eu
  1197. // SIG // Y3JsMBMGA1UdJQQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB
  1198. // SIG // /wQEAwIBBjAkBgNVHREEHTAbpBkwFzEVMBMGA1UEAxMM
  1199. // SIG // VFNBMjA0OC0xLTUzMA0GCSqGSIb3DQEBBQUAA4GBAEpr
  1200. // SIG // +epYwkQcMYl5mSuWv4KsAdYcTM2wilhu3wgpo17IypMT
  1201. // SIG // 5wRSDe9HJy8AOLDkyZNOmtQiYhX3PzchT3AxgPGLOIez
  1202. // SIG // 6OiXAP7PVZZOJNKpJ056rrdhQfMqzufJ2V7duyuFPrWd
  1203. // SIG // tdnhV/++tMV+9c8MnvCX/ivTO1IbGzgn9z9KMIID/zCC
  1204. // SIG // AuegAwIBAgIQDekr8NTYKYgYMgUJXpp2iDANBgkqhkiG
  1205. // SIG // 9w0BAQUFADBTMQswCQYDVQQGEwJVUzEXMBUGA1UEChMO
  1206. // SIG // VmVyaVNpZ24sIEluYy4xKzApBgNVBAMTIlZlcmlTaWdu
  1207. // SIG // IFRpbWUgU3RhbXBpbmcgU2VydmljZXMgQ0EwHhcNMDMx
  1208. // SIG // MjA0MDAwMDAwWhcNMDgxMjAzMjM1OTU5WjBXMQswCQYD
  1209. // SIG // VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4x
  1210. // SIG // LzAtBgNVBAMTJlZlcmlTaWduIFRpbWUgU3RhbXBpbmcg
  1211. // SIG // U2VydmljZXMgU2lnbmVyMIIBIjANBgkqhkiG9w0BAQEF
  1212. // SIG // AAOCAQ8AMIIBCgKCAQEAslAoSN3TaHqEGERmdV1+xLif
  1213. // SIG // Yyb/PUOcfBE4ECVVc9l1J2n9TrkgXNMK+aAbKu1VViFh
  1214. // SIG // 2B7b5Lwza8fv3aM3ZY4bkwy2Ux5cfGY1XwWKRf52Tt9T
  1215. // SIG // gKKBIJ2uiFyiCPflMPnuIjdMQgrO38YfxNZV6YE/tVKj
  1216. // SIG // LKoBevKiqo01/p/mXWoFnz1r47+WwP7MYPlA5wegROuB
  1217. // SIG // UW6lKvK2ihAo7Y/cBqCGUJp7SggNMB3KEJ5r9+lYrgSp
  1218. // SIG // QJmyKOiPFqw841NvS9M1nbVvZB2zliy7Ped56216+Rbm
  1219. // SIG // Jq2v75lTt0Aslbh5qv7UUqspdH5C7DkeomoW5lm7JGjY
  1220. // SIG // AIBDEIeAawIDAQABo4HKMIHHMDQGCCsGAQUFBwEBBCgw
  1221. // SIG // JjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNp
  1222. // SIG // Z24uY29tMAwGA1UdEwEB/wQCMAAwMwYDVR0fBCwwKjAo
  1223. // SIG // oCagJIYiaHR0cDovL2NybC52ZXJpc2lnbi5jb20vdHNz
  1224. // SIG // LWNhLmNybDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAO
  1225. // SIG // BgNVHQ8BAf8EBAMCBsAwJAYDVR0RBB0wG6QZMBcxFTAT
  1226. // SIG // BgNVBAMTDFRTQTIwNDgtMS01NDANBgkqhkiG9w0BAQUF
  1227. // SIG // AAOCAQEAh3hw2k5SASBb4HnJgjDE/bkZlr2RAMO9zc3G
  1228. // SIG // 9A7Y//lNwDNiMBHF9XQb1JLeX5wgE7F8Rb5QzYPngBeD
  1229. // SIG // pyeTZxNG+8q4mEEDzJtRWwWLf6hv8xtQGyQu8mmNbCL3
  1230. // SIG // u8oWle0MdMBod9nrmWKHwXOQ+Il0eiOro5h7l7H3jylx
  1231. // SIG // TS51G0hB2vC1DSBU1negl4Jjaf0Jz4rwdbsJm9n5EVUm
  1232. // SIG // mmEyvnoCsHuGvqLDiyIseNE1drySc1z5ueZMFQojzOTS
  1233. // SIG // 1DQuSUAVPA9geiTGpWbvls9w6z7n9A1+3NF8o3ZxacGc
  1234. // SIG // T0cwNSGxoq8aYjwr2Y6qKgd72BizXHvinaVv/jyJrTCC
  1235. // SIG // BBIwggL6oAMCAQICDwDBAIs8PIgR0T72Y+zfQDANBgkq
  1236. // SIG // hkiG9w0BAQQFADBwMSswKQYDVQQLEyJDb3B5cmlnaHQg
  1237. // SIG // KGMpIDE5OTcgTWljcm9zb2Z0IENvcnAuMR4wHAYDVQQL
  1238. // SIG // ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAfBgNVBAMT
  1239. // SIG // GE1pY3Jvc29mdCBSb290IEF1dGhvcml0eTAeFw05NzAx
  1240. // SIG // MTAwNzAwMDBaFw0yMDEyMzEwNzAwMDBaMHAxKzApBgNV
  1241. // SIG // BAsTIkNvcHlyaWdodCAoYykgMTk5NyBNaWNyb3NvZnQg
  1242. // SIG // Q29ycC4xHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3Jh
  1243. // SIG // dGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFJvb3QgQXV0
  1244. // SIG // aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
  1245. // SIG // CgKCAQEAqQK9wXDmO/JOGyifl3heMOqiqY0lX/j+lUyj
  1246. // SIG // t/6doiA+fFGim6KPYDJr0UJkee6sdslU2vLrnIYcj5+E
  1247. // SIG // ZrPFa3piI9YdPN4PAZLolsS/LWaammgmmdA6LL8MtVgm
  1248. // SIG // wUbnCj44liypKDmo7EmDQuOED7uabFVhrIJ8oWAtd0zp
  1249. // SIG // mbRkO5pQHDEIJBSfqeeRKxjmPZhjFGBYBWWfHTdSh/en
  1250. // SIG // 75QCxhvTv1VFs4mAvzrsVJROrv2nem10Tq8YzJYJKCEA
  1251. // SIG // V5BgaTe7SxIHPFb/W/ukZgoIptKBVlfvtjteFoF3BNr2
  1252. // SIG // vq6Alf6wzX/WpxpyXDzKvPAIoyIwswaFybMgdxOF3wID
  1253. // SIG // AQABo4GoMIGlMIGiBgNVHQEEgZowgZeAEFvQcO9pcp4j
  1254. // SIG // UX4Usk2O/8uhcjBwMSswKQYDVQQLEyJDb3B5cmlnaHQg
  1255. // SIG // KGMpIDE5OTcgTWljcm9zb2Z0IENvcnAuMR4wHAYDVQQL
  1256. // SIG // ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAfBgNVBAMT
  1257. // SIG // GE1pY3Jvc29mdCBSb290IEF1dGhvcml0eYIPAMEAizw8
  1258. // SIG // iBHRPvZj7N9AMA0GCSqGSIb3DQEBBAUAA4IBAQCV6AvA
  1259. // SIG // jfOXGDXtuAEk2HcR81xgMp+eC8s+BZGIj8k65iHy8FeT
  1260. // SIG // LLWgR8hi7/zXzDs7Wqk2VGn+JG0/ycyq3gV83TGNPZ8Q
  1261. // SIG // cGq7/hJPGGnA/NBD4xFaIE/qYnuvqhnIKzclLb5loRKK
  1262. // SIG // JQ9jo/dUHPkhydYV81KsbkMyB/2CF/jlZ2wNUfa98VLH
  1263. // SIG // vefEMPwgMQmIHZUpGk3VHQKl8YDgA7Rb9LHdyFfuZUnH
  1264. // SIG // UlS2tAMoEv+Q1vAIj364l8WrNyzkeuSod+N2oADQaj/B
  1265. // SIG // 0jaK4EESqDVqG2rbNeHUHATkqEUEyFozOG5NHA1itwqi
  1266. // SIG // jNPVVD9GzRxVpnDbEjqHk3Wfp9KgMIIEyTCCA7GgAwIB
  1267. // SIG // AgIQaguZT8AA3qoR1NhAmqi+5jANBgkqhkiG9w0BAQQF
  1268. // SIG // ADBwMSswKQYDVQQLEyJDb3B5cmlnaHQgKGMpIDE5OTcg
  1269. // SIG // TWljcm9zb2Z0IENvcnAuMR4wHAYDVQQLExVNaWNyb3Nv
  1270. // SIG // ZnQgQ29ycG9yYXRpb24xITAfBgNVBAMTGE1pY3Jvc29m
  1271. // SIG // dCBSb290IEF1dGhvcml0eTAeFw0wMDEyMTAwODAwMDBa
  1272. // SIG // Fw0wNTExMTIwODAwMDBaMIGmMQswCQYDVQQGEwJVUzET
  1273. // SIG // MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
  1274. // SIG // bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
  1275. // SIG // aW9uMSswKQYDVQQLEyJDb3B5cmlnaHQgKGMpIDIwMDAg
  1276. // SIG // TWljcm9zb2Z0IENvcnAuMSMwIQYDVQQDExpNaWNyb3Nv
  1277. // SIG // ZnQgQ29kZSBTaWduaW5nIFBDQTCCASAwDQYJKoZIhvcN
  1278. // SIG // AQEBBQADggENADCCAQgCggEBAKKEFVPYCzAONJX/OhvC
  1279. // SIG // 8y97bTcjTfPSjOX9r/3FAjQfJMflodxU7H4CdEer2zJY
  1280. // SIG // FhRRKTjxfrK0jDpHtTlOblTCMQw6bfvNzctQnBuup9jZ
  1281. // SIG // SiY/tcXLj5biSfJt2OmWPt4Fz/CmVTetL2DNgGFCoUlU
  1282. // SIG // Sg8Yt0vZk5kwWkd1ZLTTu922qwydT7hzOxg6qrSHjLCI
  1283. // SIG // sE1PH04RtTOA3w06ZG9ExzS9SpObvKYd+QUjTmApj8wq
  1284. // SIG // 8oSama2o2wpwe9Y0QZClt2bHXBsdozMOm1QDGj+YkLjM
  1285. // SIG // 5z0EdEMcj/c55rOsSHprKg5iAWE5dm79PpgHSxTxAUb9
  1286. // SIG // FQDgR9pP5AXkgCUCAQOjggEoMIIBJDATBgNVHSUEDDAK
  1287. // SIG // BggrBgEFBQcDAzCBogYDVR0BBIGaMIGXgBBb0HDvaXKe
  1288. // SIG // I1F+FLJNjv/LoXIwcDErMCkGA1UECxMiQ29weXJpZ2h0
  1289. // SIG // IChjKSAxOTk3IE1pY3Jvc29mdCBDb3JwLjEeMBwGA1UE
  1290. // SIG // CxMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEwHwYDVQQD
  1291. // SIG // ExhNaWNyb3NvZnQgUm9vdCBBdXRob3JpdHmCDwDBAIs8
  1292. // SIG // PIgR0T72Y+zfQDAQBgkrBgEEAYI3FQEEAwIBADAdBgNV
  1293. // SIG // HQ4EFgQUKVy5G7bNM+67nll99+XKLsQNNCgwGQYJKwYB
  1294. // SIG // BAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgFG
  1295. // SIG // MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQAD
  1296. // SIG // ggEBAEVY4ppBf/ydv0h3d66M2eYZxVe0Gr20uV8CoUVq
  1297. // SIG // OVn5uSecLU2e/KLkOIo4ZCJC37kvKs+31gbK6yq/4BqF
  1298. // SIG // fNtRCD30ItPUwG2IgRVEX2SDZMSplCyK25A3Sg+36NRh
  1299. // SIG // j3Z24dkl/ySElY0EVlSUoRw6PoK87qWHjByMS3lftUn6
  1300. // SIG // XjJpOh9UrXVN32TnMDzbZElE+/vEHEJx5qA9Re5rAJ+s
  1301. // SIG // Qr26EbNW5PvVoiqB2B9OolW+J49wpqJsG/9UioK8gUum
  1302. // SIG // obFmeqkXp8sGwEfrprPpMRVTPSoEv/9zSNyLJ0P8Y+ju
  1303. // SIG // JIdbvjbR6DH1Mtle33l6ujCsaYZK+4wRvxuNVFkwggTh
  1304. // SIG // MIIDyaADAgECAgphDn2nAAAAAABIMA0GCSqGSIb3DQEB
  1305. // SIG // BQUAMIGmMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz
  1306. // SIG // aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
  1307. // SIG // ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSswKQYDVQQL
  1308. // SIG // EyJDb3B5cmlnaHQgKGMpIDIwMDAgTWljcm9zb2Z0IENv
  1309. // SIG // cnAuMSMwIQYDVQQDExpNaWNyb3NvZnQgQ29kZSBTaWdu
  1310. // SIG // aW5nIFBDQTAeFw0wMzEwMjUwNTU5MTRaFw0wNTAxMjUw
  1311. // SIG // NjA5MTRaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX
  1312. // SIG // YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
  1313. // SIG // VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xHjAcBgNV
  1314. // SIG // BAMTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjCCASIwDQYJ
  1315. // SIG // KoZIhvcNAQEBBQADggEPADCCAQoCggEBALIthwm1XN9V
  1316. // SIG // metSYufT9ONFcakyv5TyDukNrf6dxwRqWE6cpNHYREH7
  1317. // SIG // ZH4PZe7IF9pN29nWULQMVltsFohLvwPuUEiD7E+Ik5pR
  1318. // SIG // 45QZf/qzl6XOYG2f3UyTOL3NNFlx5obO6YOZoJa46uBE
  1319. // SIG // WxNCuTpITlRy9wiW5ADEggF2Q69hwtv65cXwAhPd+DW0
  1320. // SIG // Dw1SNkZ0Q7GiypzdfpnxNRF3+xUmAY7P4LgEeCoV/XLG
  1321. // SIG // YHaRDOdPshgYG2mJtPEvIRtm6sqRx0YNuRdYcVhWhmUj
  1322. // SIG // 0QIyrmSgb9pSlf373Y009cEMNaNH1+kbavoPRbToMh1w
  1323. // SIG // Gb3R+eVkH+uHN+pv1A2Dj/0CAwEAAaOCAUAwggE8MA4G
  1324. // SIG // A1UdDwEB/wQEAwIGwDAdBgNVHQ4EFgQUgo+nF2RkckTV
  1325. // SIG // MK4WhOJTkMs+ntQwEwYDVR0lBAwwCgYIKwYBBQUHAwMw
  1326. // SIG // gakGA1UdIwSBoTCBnoAUKVy5G7bNM+67nll99+XKLsQN
  1327. // SIG // NCihdKRyMHAxKzApBgNVBAsTIkNvcHlyaWdodCAoYykg
  1328. // SIG // MTk5NyBNaWNyb3NvZnQgQ29ycC4xHjAcBgNVBAsTFU1p
  1329. // SIG // Y3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMYTWlj
  1330. // SIG // cm9zb2Z0IFJvb3QgQXV0aG9yaXR5ghBqC5lPwADeqhHU
  1331. // SIG // 2ECaqL7mMEoGA1UdHwRDMEEwP6A9oDuGOWh0dHA6Ly9j
  1332. // SIG // cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz
  1333. // SIG // L0NvZGVTaWduUENBLmNybDANBgkqhkiG9w0BAQUFAAOC
  1334. // SIG // AQEASkjcMrB6Zz+LKwG0DPXbeUFd4Dftv1Fzf9b5fmxt
  1335. // SIG // f5+8paRIHqjj7ab1PIZqkVlM1FMU697uzcPckKMIsYtF
  1336. // SIG // Ov1qcPDOBAY2LjC0j0yr6t1DWc2DoNfupEmuECRPmf/V
  1337. // SIG // Avnshkyl2CLoARct6xOQmZoRgDMMGYh+BhnUMe1MyX67
  1338. // SIG // JMexveVUO+p3EImHbOCcgI3SEORKl6nqVxnXeCsNmzUn
  1339. // SIG // sTi+0r+tx/DmbVqfEPbK8fLgMKsBphPItjlkvQkJ7Yu2
  1340. // SIG // FBhqeinGdEs7R/EUycveF92yXNjMOYc8OUjFMHyOdVfu
  1341. // SIG // 7RugDYVyNWRJvqFJOOKanEp8gmQNAXhfVv6IdDGCBI0w
  1342. // SIG // ggSJAgEBMIG1MIGmMQswCQYDVQQGEwJVUzETMBEGA1UE
  1343. // SIG // CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
  1344. // SIG // MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSsw
  1345. // SIG // KQYDVQQLEyJDb3B5cmlnaHQgKGMpIDIwMDAgTWljcm9z
  1346. // SIG // b2Z0IENvcnAuMSMwIQYDVQQDExpNaWNyb3NvZnQgQ29k
  1347. // SIG // ZSBTaWduaW5nIFBDQQIKYQ59pwAAAAAASDAJBgUrDgMC
  1348. // SIG // GgUAoIGqMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEE
  1349. // SIG // MBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMG
  1350. // SIG // CSqGSIb3DQEJBDEWBBTFmpGcHQPJdr80Sn5NiECNteZl
  1351. // SIG // 7TBKBgorBgEEAYI3AgEMMTwwOqAYgBYAYwBoAG4AZwBw
  1352. // SIG // AHIAbwBwAC4AagBzoR6AHGh0dHA6Ly9vZmZpY2UubWlj
  1353. // SIG // cm9zb2Z0LmNvbSAwDQYJKoZIhvcNAQEBBQAEggEAatLt
  1354. // SIG // Mpfh4AqtHv5Xv8+DXcLw8tYqW1yd1CCzq1W6LLFkFQ16
  1355. // SIG // fsdXuSCWcG5ubZ9CLL+q7O758TPmuA2AfKS+dH3G5pbC
  1356. // SIG // 61SRbZEZb1NGjY32z712BtoNEtm5/vWgIbdi5gn6vUbj
  1357. // SIG // 18dybfxmgwfWffxmRPawf3IKuLcs68GiWs56iDIAtcYw
  1358. // SIG // oGLYd5l09adl8BTlO3PwzFV38Ol/yrHxesg3lLfZ/YFS
  1359. // SIG // XlF6aa21ub+IVpa96/isXs1s8WJjvKU68GOR0eUfoCDy
  1360. // SIG // si2v2HzmE/KoBk6UqwoebxaH8qlOUWO4gxmHAwwGLjaC
  1361. // SIG // r9OFsSaNvvh6MvvbkNN0zRT3sdgHA6GCAf8wggH7Bgkq
  1362. // SIG // hkiG9w0BCQYxggHsMIIB6AIBATBnMFMxCzAJBgNVBAYT
  1363. // SIG // AlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjErMCkG
  1364. // SIG // A1UEAxMiVmVyaVNpZ24gVGltZSBTdGFtcGluZyBTZXJ2
  1365. // SIG // aWNlcyBDQQIQDekr8NTYKYgYMgUJXpp2iDAMBggqhkiG
  1366. // SIG // 9w0CBQUAoFkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEH
  1367. // SIG // ATAcBgkqhkiG9w0BCQUxDxcNMDQwNDE2MDkzNzIwWjAf
  1368. // SIG // BgkqhkiG9w0BCQQxEgQQSqkSK3PLKuRhADC3SLCDzzAN
  1369. // SIG // BgkqhkiG9w0BAQEFAASCAQAXfeUVhAqTedcb2ZHktNBg
  1370. // SIG // nglcI02fRgo6GHcdBjW4V6l+kfEmkT8gycnDcVKfNzD+
  1371. // SIG // FFLeLgYgqzObTe8uRPRdacdeBcqLEEtHEU4WSPVTddie
  1372. // SIG // QDvt/8BQyiUAjJ0kRWyYKM37v7eG4ST8pLpWnO8mNPeQ
  1373. // SIG // 3ABR+ASFEJ3jwTgCxnX7//774fUhOZ6Y3wn90hqdiM4T
  1374. // SIG // jhQ9hBVl9qgz8Ru7fgBjegcMCY0GydY4Pt2z+MYDbLMN
  1375. // SIG // bJ4DBNBu7oWBo7pPaaanTLHZfz5LC7UWF+NtmzU5sEjW
  1376. // SIG // LdWZfNpczuEI0d27AdiA+oU2NQNv9MwEHIIeL3P5NHiD
  1377. // SIG // stJsUl30YWsV
  1378. // SIG // End signature block
  1379.